package top.xphu.java.demo2;

import java.util.Observable;
import java.util.Observer;

/**
 * 股市价格问题：
 * 油价上涨，多方高兴，空方伤心
 * 油价下跌，空方高兴，多方伤心
 * 油价
 * @author xphu
 * @version 1.0
 * @date 2021/7/19 16:32
 */
public class CrudeOilFutures {
    public static void main(String[] args) {
        OilFutures futures = new OilFutures();
        Bull bull = new Bull();
        Bear bear = new Bear();
        futures.addObserver(bull);
        futures.addObserver(bear);
        futures.setPrice(10);
        futures.setPrice(-5);
        futures.setPrice(11);
        futures.setPrice(-5);
        futures.setPrice(-3);
    }
}

/**
 * 具体的目标类：原油期货
 */
class OilFutures extends Observable {

    /**
     * 油价
     */
    private float price;

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        // 设置内部标志，标志数据发生变化
        super.setChanged();
        // 通知观察者价格
        super.notifyObservers(price);
        this.price = price;
    }

}

/**
 * 观察者：多方
 */
class Bull implements Observer {

    public void update(Observable o, Object arg) {
        float price = ((Float) arg).floatValue();
        if (price > 0) {
            System.out.println("油价上涨" + price + "元，多方高兴了！");
        } else {
            System.out.println("油价下跌" + (-price) + "元，多方伤心了！");
        }
    }
}

/**
 * 观察者：空方
 */
class Bear  implements Observer {

    public void update(Observable o, Object arg) {
        float price = ((Float) arg).floatValue();
        if (price > 0) {
            System.out.println("油价上涨" + price + "元，空方伤心了！");
        } else {
            System.out.println("油价下跌" + (-price) + "元，空方高兴了！");
        }
    }
}